// Typescript中的接口的用途以及属性类型接口

/**typescript中的接口
 * 5.1 属性类接口
 * 5.2 函数类型接口
 * 5.3 可索引接口
 * 5.4 类类型接口
 * 5.5 接口扩展
 */



// 属性接口 ---- 对json的约束
// function printLabel(labelledObj: {label:string}) {
//   console.log(labelledObj.label);
// }
// let myObj = {size: 10, label: 'Size 10 Object'}
// printLabel(myObj)

interface FullName {
  firstName: string;
  secondName: string;
}
function printName(name: FullName) {
  // 必须传入对象firstName secondName
  console.log(name.firstName + '-----' + name.secondName)
}
// printName('1213')
var obj = {
  age: 20,
  firstName: '张',
  secondName: '三'
}
printName(obj)

// 对批量方法传入参数进行约束
// 接口:行为和动作的规范 对批量方法进行约束


// 接口 - 可选属性
interface FullName2 {
  firstName: string,
  secondName?: string
}

interface ajaxConfig {
  type: string;
  url: string;
  data?: string;
  dataType: string
}
// 原生js封装的ajax
function ajax(config: ajaxConfig) {
  var xhr = new XMLHttpRequest
  xhr.open('get', config.url, true)
  xhr.send(config.data)
  xhr.onreadystatechange = function () {
    if(xhr.readyState == 4 && xhr.status == 200) {
      console.log('成功')
      if(config.dataType == 'json') {
        console.log(JSON.parse(xhr.responseText))
      }else{
        console.log(xhr.responseText)
      }
     
    }
  }
}

ajax({
  type: 'get',
  data: 'name=zhangsan',
  url: 'http://a.itying.com/api/productlist',
  dataType: 'json'
})







